package datamodule;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import util.FString;
import conexao.Connect;

public class ContaDAO {


	private DBuserVO userVO;

	public ContaDAO( DBuserVO userVO){
		this.userVO = userVO;
	}
	//Inserir Conta
	public int inserir(ContaVO VOcta) throws ClassNotFoundException, SQLException {
		Connection con = Connect.getConnection(userVO);
		PreparedStatement pstmtInsert = con.prepareStatement(
				"INSERT INTO conta(cta_Cod_Conta, cta_Descricao, igr_Cod_Igreja, cta_Agencia, " +
				" cta_Cod_Bco, cta_Conta, cta_Saldo_Ini, cta_Tipo) " +
				" VALUES(?,?,?,?,?,?,?,?) ");
		pstmtInsert.setString(1, VOcta.getCta_Cod_Conta());			
		pstmtInsert.setString(2, VOcta.getCta_Descricao());
		pstmtInsert.setString(3, VOcta.getIgr_Cod_Igreja());
		pstmtInsert.setString(4, VOcta.getCta_Agencia());
		pstmtInsert.setString(5, VOcta.getCta_Cod_Bco());
		pstmtInsert.setString(6, VOcta.getCta_Conta());
		pstmtInsert.setDouble(7, VOcta.getCta_Saldo_Ini());
		pstmtInsert.setString(8, VOcta.getCta_Tipo());
		int reg = pstmtInsert.executeUpdate();	
		con.close();
		return reg;
	}

	//Alterar Conta
	public int alterar(ContaVO VOcta) throws ClassNotFoundException, SQLException {
		Connection con = Connect.getConnection(userVO);
		String virgula = "";
		StringBuffer sql = new StringBuffer(" UPDATE conta SET ");

		if (!VOcta.getCta_Cod_Conta().equals(FString.ignorar)) {
			sql.append(virgula+" cta_Cod_Conta = '"+VOcta.getCta_Cod_Conta()+"' ");
			virgula = ",";
		}
		
		if (!VOcta.getCta_Descricao().equals(FString.ignorar)) {
			sql.append(virgula+" cta_Descricao = '"+VOcta.getCta_Descricao()+"' ");
			virgula = ",";
		}
		
		if (!VOcta.getIgr_Cod_Igreja().equals(FString.ignorar)) {
			sql.append(virgula+" igr_Cod_Igreja = '"+VOcta.getIgr_Cod_Igreja()+"' ");
			virgula = ",";
		}
				
		if (!VOcta.getCta_Agencia().equals(FString.ignorar)) {
			sql.append(virgula+" cta_Agencia = '"+VOcta.getCta_Agencia()+"' ");
			virgula = ",";
		}
		if (!VOcta.getCta_Cod_Bco().equals(FString.ignorar)) {
			sql.append(virgula+" cta_Cod_Bco = '"+VOcta.getCta_Cod_Bco()+"' ");
			virgula = ",";
		}
		if (!VOcta.getCta_Conta().equals(FString.ignorar)) {
			sql.append(virgula+" cta_Conta = '"+VOcta.getCta_Conta()+"' ");
			virgula = ",";
		}
		if (!VOcta.getCta_Saldo_Ini().equals(FString.ignorar)) {
			sql.append(virgula+" cta_Saldo_Ini = '"+VOcta.getCta_Saldo_Ini()+"' ");
			virgula = ",";
		}	
		if (!VOcta.getCta_Tipo().equals(FString.ignorar)) {
			sql.append(virgula+" cta_Tipo = '"+VOcta.getCta_Tipo()+"' ");
			virgula = ",";
		}
				
		sql.append(" WHERE cta_Cod_Conta = '"+VOcta.getCta_Cod_Conta()+"' ");
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0, sql.length()));
		//System.out.println(pstmt);
		int registrosAfetados = pstmt.executeUpdate();
		con.close();
		return registrosAfetados;
	}	
	
	// Deletar Conta
	public int deletar(ContaVO VOcta) throws ClassNotFoundException, SQLException {		
		Connection con = Connect.getConnection(userVO);
		PreparedStatement pstmt = con.prepareStatement(
		"DELETE FROM conta WHERE cta_Cod_Conta = ?");
		pstmt.setString(1, VOcta.getCta_Cod_Conta());
		int registrosAfetados = pstmt.executeUpdate();
		con.close();
		return registrosAfetados;
	}

	//Pesquisar Conta
	public ContaVO pesquisar(ContaVO VOcta) throws ClassNotFoundException, SQLException {				
		Connection con = Connect.getConnection(userVO);
		StringBuffer sql = new StringBuffer("SELECT * FROM conta  Where cta_Cod_Conta <> '' ");
		
		if (!VOcta.getCta_Cod_Conta().equals(FString.ignorar)) {
			sql.append(" AND UPPER(cta_Cod_Conta) = '"+VOcta.getCta_Cod_Conta()+"' ");			
		}		
		if (!VOcta.getCta_Descricao().equals(FString.ignorar)) {
			sql.append(" AND UPPER(cta_Descricao) = '"+VOcta.getCta_Descricao()+"' ");			
		}
		if (!VOcta.getIgr_Cod_Igreja().equals(FString.ignorar)) {
			sql.append(" AND UPPER(igr_Cod_Igreja) = '"+VOcta.getIgr_Cod_Igreja()+"' ");			
		}
	
		//System.out.println(sql);
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));		
		ResultSet rs = pstmt.executeQuery();
		if (rs.next()) {

			VOcta = new ContaVO();
			VOcta.setCta_Cod_Conta ( rs.getString("cta_Cod_Conta"));
			VOcta.setCta_Descricao ( rs.getString("cta_Descricao"));
			VOcta.setIgr_Cod_Igreja( rs.getString("igr_Cod_Igreja"));
			VOcta.setCta_Agencia   ( rs.getString("cta_Agencia"));
			VOcta.setCta_Cod_Bco   ( rs.getString("cta_Cod_Bco"));
			VOcta.setCta_Conta     ( rs.getString("cta_Conta"));
			VOcta.setCta_Saldo_Ini ( rs.getString("cta_Saldo_Ini"));
			VOcta.setCta_Tipo      ( rs.getString("cta_Tipo"));
			
		}else {
			VOcta = null;
		}
		pstmt.close();
		rs.close();
		con.close();
		return VOcta;
	}

	public ArrayList<ContaVO> geral(ContaVO VOcta) throws SQLException, ClassNotFoundException {		
		ArrayList<ContaVO> lista = null;
		Connection con = Connect.getConnection(userVO);
		StringBuffer sql = new StringBuffer("SELECT * FROM conta Where cta_Cod_Conta <> ''  ");
		if (!VOcta.getCta_Cod_Conta().equals(FString.ignorar)) {
			sql.append(" AND UPPER(cta_Cod_Conta) = ('"+VOcta.getCta_Cod_Conta()+"')");
		}
		if (!VOcta.getCta_Descricao().equals(FString.ignorar)) {
			sql.append(" AND UPPER(cta_Descricao) LIKE UPPER('"+VOcta.getCta_Descricao()+"%"+"')");
		}
		if (!VOcta.getIgr_Cod_Igreja().equals(FString.ignorar)) {
			sql.append(" AND UPPER(igr_Cod_Igreja) = ('"+VOcta.getIgr_Cod_Igreja()+"')");
		}
		if (!VOcta.getOrdem().equals(FString.ignorar)) {
			sql.append(" ORDER BY "+VOcta.getOrdem());
		}
		if (!VOcta.getLimit().equals(FString.ignorar)) {
			sql.append(" LIMIT "+VOcta.getLimit());
		}
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));		
		ResultSet rs = pstmt.executeQuery();
		if (rs.next()) {
			lista = new ArrayList<ContaVO>();
			do {
				ContaVO cta = new ContaVO();
				cta.setCta_Cod_Conta ( rs.getString("cta_Cod_Conta"));
				cta.setCta_Descricao ( rs.getString("cta_Descricao"));
				cta.setIgr_Cod_Igreja( rs.getString("igr_Cod_Igreja"));
				cta.setCta_Agencia   ( rs.getString("cta_Agencia"));
				cta.setCta_Cod_Bco   ( rs.getString("cta_Cod_Bco"));
				cta.setCta_Conta     ( rs.getString("cta_Conta"));
				cta.setCta_Saldo_Ini ( rs.getString("cta_Saldo_Ini"));
				cta.setCta_Tipo      ( rs.getString("cta_Tipo"));
			
				lista.add(cta);
			}
			while (rs.next());			
		}
		pstmt.close();
		rs.close();
		con.close();
		return lista;
	}	
	
	public ResultSet listagem(ContaVO VOcta, Connection con) throws SQLException, ClassNotFoundException {		
		StringBuffer sql = new StringBuffer("SELECT "+
	    " igrejas.`igr_Cod_Igreja` AS igrejas_igr_Cod_Igreja, "+
		" igrejas.`igr_Descricao` AS igrejas_igr_Descricao, "+
		" conta.`cta_Cod_Conta` AS conta_cta_Cod_Conta, "+
		" conta.`cta_Descricao` AS conta_cta_Descricao, "+
		" conta.`cta_Agencia` AS conta_cta_Agencia, "+
		" conta.`cta_Cod_Bco` AS conta_cta_Cod_Bco, "+
		" conta.`cta_Conta` AS conta_cta_Conta, "+
		" conta.`igr_Cod_Igreja` AS conta_igr_Cod_Igreja, "+
		" conta.`cta_Saldo_Ini` AS conta_cta_Saldo_Ini, "+
		" conta.`cta_Tipo` AS conta_cta_Tipo "+
		" FROM  `igrejas` igrejas INNER JOIN `conta` conta ON igrejas.`igr_Cod_Igreja` = conta.`igr_Cod_Igreja` "+				
		" WHERE conta.`cta_Cod_Conta` <> '' ");		

		if (!VOcta.getCta_Cod_Conta().equals(FString.ignorar) && !VOcta.getCta_Cod_Conta().isEmpty()) {
			sql.append(" AND UPPER(conta.`cta_Cod_Conta`) = '"+VOcta.getCta_Cod_Conta()+"'");			
		}		
		if (!VOcta.getCta_Descricao().equals(FString.ignorar) && !VOcta.getCta_Descricao().isEmpty()) {
			sql.append(" AND UPPER(conta.`cta_Descricao`) LIKE UPPER('"+VOcta.getCta_Descricao()+"%"+"')");			
		}
		
		if (!VOcta.getIgr_Cod_Igreja().equals(FString.ignorar) && !VOcta.getIgr_Cod_Igreja().isEmpty()) {
			sql.append(" AND UPPER(conta.`igr_Cod_Igreja`) = '"+VOcta.getIgr_Cod_Igreja()+"'");
		}

		if (!VOcta.getCta_Cod_Bco().equals(FString.ignorar) && !VOcta.getCta_Cod_Bco().isEmpty()) {
			sql.append(" AND UPPER(conta.`cta_Cod_Bco`) = '"+VOcta.getCta_Cod_Bco()+"'");			
		}
		
		if (!VOcta.getCta_Agencia().equals(FString.ignorar) && !VOcta.getCta_Agencia().isEmpty()) {
			sql.append(" AND UPPER(conta.`cta_Agencia`) = '"+VOcta.getCta_Agencia()+"'");			
		}

		if (!VOcta.getCta_Conta().equals(FString.ignorar) && !VOcta.getCta_Conta().isEmpty()) {
			sql.append(" AND UPPER(conta.`cta_Conta`) = '"+VOcta.getCta_Conta()+"'");			
		}

		
		if (!VOcta.getOrdem().equals(FString.ignorar) && !VOcta.getOrdem().isEmpty()) {
			sql.append(" ORDER BY "+VOcta.getOrdem());
		}
		if (!VOcta.getLimit().equals(FString.ignorar)) {
			sql.append(" LIMIT "+VOcta.getLimit());
		}
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));
		System.out.println(pstmt);
		ResultSet rs = pstmt.executeQuery();
		return rs;
	}		

}